package cn.com.anypay.manager.service;

import cn.com.anysdk.map.model.Location;
import cn.com.anysdk.map.exception.MapException;
import cn.com.anysdk.map.model.CoordinateType;
import cn.com.anysdk.map.model.LocationResult;
import cn.com.anysdk.map.model.AddressResult;

import java.util.Map;

public interface MapService {

    /**
     * 将地址转换为地理坐标
     * @param address 地址字符串
     * @return 地理坐标信息
     * @throws MapException 地图服务异常
     */
    LocationResult geocode(String address) throws MapException;

    /**
     * 将坐标转换为地址信息
     * @param location 坐标信息
     * @return 地址信息
     * @throws MapException 地图服务异常
     */
    AddressResult reverseGeocode(Location location) throws MapException;

    /**
     * 坐标系转换
     * @param location 原始坐标
     * @param fromType 原始坐标系
     * @param toType 目标坐标系
     * @return 转换后的坐标信息
     * @throws MapException 地图服务异常
     */
    LocationResult convertCoordinate(Location location, CoordinateType fromType, CoordinateType toType) throws MapException;

    /**
     * 切换地图服务提供商
     * @param config 地图服务配置
     * @return 切换结果信息
     * @throws MapException 地图服务异常
     */
    String switchProvider(Map<String, Object> config) throws MapException;

    /**
     * 获取静态地图URL
     * @param address 地址
     * @param zoom 缩放级别
     * @return 静态地图URL
     */
    String getStaticMapUrl(String address, int zoom);

    /**
     * 获取当前配置
     * @return 当前配置信息
     * @throws MapException 地图服务异常
     */
    Map<String, Object> getCurrentConfig() throws MapException;

    /**
     * 根据提供商类型获取配置
     * @param provider 提供商类型
     * @return 配置信息
     * @throws MapException 地图服务异常
     */
    Map<String, Object> getConfigByProvider(String provider) throws MapException;
}
